library(vegan)
 
#读取上述数据集
df <- read.csv('Your_OTU_table.csv', header= TRUE)
 
##计算距离
#根据物种丰度数据，计算样方间的 Bray-curtis 距离
abund <- df[ ,8:ncol(df)]
dist.abund <- vegdist(abund, method = 'bray')
 
#根据环境测量指标，计算样方间的欧几里得距离
#这里只选择了其中的温度指标，期望关注物种变化与温度的相关性
temp <- df$Temperature
dist.temp <- dist(temp, method = 'euclidean')
 
#如果期望关注多种环境的协同作用，就选择一个环境子集，计算样方间的欧几里得距离
#例如使用 4 种环境数据，但此时需要执行数据标准化，以消除量纲差异
env <- df[ ,2:5]
scale.env <- scale(env, center = TRUE, scale = TRUE)
dist.env <- dist(scale.env, method = 'euclidean')
 
#根据经纬度，计算样方间实际的地理距离
geo <- data.frame(df$Longitude, df$Latitude)
d.geo <- distm(geo, fun = distHaversine)       #library(geosphere)
dist.geo <- as.dist(d.geo)
 
##执行 Mantel tests，详情 ?mantel，以下为 3 个示例
#物种丰度和温度的相关性，以 spearman 相关系数为例，9999 次置换检验显著性（Mantel tests 基于随机置换的方法获取 p 值）
abund_temp <- mantel(dist.abund, dist.temp, method = 'spearman', permutations = 9999, na.rm = TRUE)
abund_temp
 
#物种丰度和地理距离的相关性，以 spearman 相关系数为例，9999 次置换检验显著性
abund_geo <- mantel(dist.abund, dist.geo, method = 'spearman', permutations = 9999, na.rm = TRUE)
abund_geo
 
#物种丰度和 4 种环境组合的相关性，以 spearman 相关系数为例，9999 次置换检验显著性
abund_env <- mantel(dist.abund, dist.env, method = 'spearman', permutations = 9999, na.rm = TRUE)
abund_env
